#include "mat_keyboard.h"

Key_state_t key_state={.key_state={KEY_SUSPUND},.key_press_time_start={0x00}};

void key_state_init(void)
{
	HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(R3_GPIO_Port,R3_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(R4_GPIO_Port,R4_Pin,GPIO_PIN_RESET);
}

void key_scan()
{
	for(int i=0;i<4;i++){
		switch(i){
			case 0:
				HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R3_GPIO_Port,R3_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R4_GPIO_Port,R4_Pin,GPIO_PIN_RESET);
				if(HAL_GPIO_ReadPin(C1_GPIO_Port,C1_Pin)==GPIO_PIN_SET){
					key_state.key_state[3]=0;
					key_state.keylocked_if[3]=0;
				}
				else{
					key_state.key_state[3]=1;
				}
				if(HAL_GPIO_ReadPin(C2_GPIO_Port,C2_Pin)==GPIO_PIN_SET){
					key_state.key_state[2]=0;
					key_state.keylocked_if[2]=0;
				}
				else{
					key_state.key_state[2]=1;
				}
				if(HAL_GPIO_ReadPin(C3_GPIO_Port,C3_Pin)==GPIO_PIN_SET){
					key_state.key_state[1]=0;
					key_state.keylocked_if[1]=0;
				}
				else{
					key_state.key_state[1]=1;
				}
				if(HAL_GPIO_ReadPin(C4_GPIO_Port,C4_Pin)==GPIO_PIN_SET){
					key_state.key_state[0]=0;
					key_state.keylocked_if[0]=0;
				}
				else{
					key_state.key_state[0]=1;
				}
				break;
			case 1:
				HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R3_GPIO_Port,R3_Pin,GPIO_PIN_RESET);
				HAL_GPIO_WritePin(R4_GPIO_Port,R4_Pin,GPIO_PIN_SET);
				if(HAL_GPIO_ReadPin(C1_GPIO_Port,C1_Pin)==GPIO_PIN_SET){
					key_state.key_state[3+4]=0;
					key_state.keylocked_if[3+4]=0;
				}
				else{
					key_state.key_state[3+4]=1;
				}
				if(HAL_GPIO_ReadPin(C2_GPIO_Port,C2_Pin)==GPIO_PIN_SET){
					key_state.key_state[2+4]=0;
					key_state.keylocked_if[2+4]=0;
				}
				else{
					key_state.key_state[2+4]=1;
				}
				if(HAL_GPIO_ReadPin(C3_GPIO_Port,C3_Pin)==GPIO_PIN_SET){
					key_state.key_state[1+4]=0;
					key_state.keylocked_if[1+4]=0;
				}
				else{
					key_state.key_state[1+4]=1;
				}
				if(HAL_GPIO_ReadPin(C4_GPIO_Port,C4_Pin)==GPIO_PIN_SET){
					key_state.key_state[0+4]=0;
					key_state.keylocked_if[0+4]=0;
				}
				else{
					key_state.key_state[0+4]=1;
				}
				break;
			case 2:
				HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_RESET);
				HAL_GPIO_WritePin(R3_GPIO_Port,R3_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R4_GPIO_Port,R4_Pin,GPIO_PIN_SET);
				if(HAL_GPIO_ReadPin(C1_GPIO_Port,C1_Pin)==GPIO_PIN_SET){
					key_state.key_state[3+8]=0;
					key_state.keylocked_if[3+8]=0;
				}
				else{
					key_state.key_state[3+8]=1;
				}
				if(HAL_GPIO_ReadPin(C2_GPIO_Port,C2_Pin)==GPIO_PIN_SET){
					key_state.key_state[2+8]=0;
					key_state.keylocked_if[2+8]=0;
				}
				else{
					key_state.key_state[2+8]=1;
				}
				if(HAL_GPIO_ReadPin(C3_GPIO_Port,C3_Pin)==GPIO_PIN_SET){
					key_state.key_state[1+8]=0;
					key_state.keylocked_if[1+8]=0;
				}
				else{
					key_state.key_state[1+8]=1;
				}
				if(HAL_GPIO_ReadPin(C4_GPIO_Port,C4_Pin)==GPIO_PIN_SET){
					key_state.key_state[0+8]=0;
					key_state.keylocked_if[0+8]=0;
				}
				else{
					key_state.key_state[0+8]=1;
				}
				break;
			case 3:
				HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_RESET);
				HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R3_GPIO_Port,R3_Pin,GPIO_PIN_SET);
				HAL_GPIO_WritePin(R4_GPIO_Port,R4_Pin,GPIO_PIN_SET);
				if(HAL_GPIO_ReadPin(C1_GPIO_Port,C1_Pin)==GPIO_PIN_SET){
					key_state.key_state[3+12]=0;
					key_state.keylocked_if[3+12]=0;
				}
				else{
					key_state.key_state[3+12]=1;
				}
				if(HAL_GPIO_ReadPin(C2_GPIO_Port,C2_Pin)==GPIO_PIN_SET){
					key_state.key_state[2+12]=0;
					key_state.keylocked_if[2+12]=0;
				}
				else{
					key_state.key_state[2+12]=1;
				}
				if(HAL_GPIO_ReadPin(C3_GPIO_Port,C3_Pin)==GPIO_PIN_SET){
					key_state.key_state[1+12]=0;
					key_state.keylocked_if[1+12]=0;
				}
				else{
					key_state.key_state[1+12]=1;
				}
				if(HAL_GPIO_ReadPin(C4_GPIO_Port,C4_Pin)==GPIO_PIN_SET){
					key_state.key_state[0+12]=0;
					key_state.keylocked_if[0+12]=0;
				}
				else{
					key_state.key_state[0+12]=1;
				}
				break;
		}
	}
}

